package com.example.diskmonitor.controller;

import com.example.diskmonitor.entity.SysFile;
import com.example.diskmonitor.service.DiskMonitorDemo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.CrossOrigin;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
import com.example.diskmonitor.dto.PaginationResponseDTO;

@RestController
@CrossOrigin(origins = "http://localhost:5173")
@RequestMapping("/api")
public class DiskMonitorController {

    @Autowired
    private DiskMonitorDemo diskMonitorDemo;

    @Value("${disk.monitor.page.default-size}")
    private int defaultPageSize;

    @GetMapping("/disk-info")                       // 请求路径
    public PaginationResponseDTO<SysFile> getDiskInfo(
              @RequestParam(name = "page", defaultValue = "0")
              int page,                                // 从URL中获取页码, 默认为0
            @RequestParam(name = "size", required = false)
            Integer size,                               // 从URL中获取每页数量, 可以不传
            HttpServletRequest request) {               // 注入HttpServletRequest对象
        if ( size == null ) {
            size = defaultPageSize;                   // 如果没有传, 则使用默认值
        }
        // 创建分页对象
        System.out.println("Received disk info request - page: " + page + ", size: " + size);
        System.out.println("Client IP: " + request.getRemoteAddr());
        System.out.println("Origin: " + request.getHeader("Origin"));
        System.out.println("Request method: " + request.getMethod());
        Pageable pageable = PageRequest.of(page, size);
        /*
        *  PageRequest.of(page, size) Spring Data JPA 提供的静态工厂方法
        *  page：页码（从 0 开始，0 表示第 1 页）
        *  size：每页记录数
        * */
        System.out.println("返回分页数据 SQL 如下");
        Page<SysFile> resultPage = diskMonitorDemo.getAllDiskInfo(pageable);

        // 封装分页响应数据
        PaginationResponseDTO<SysFile> response = new PaginationResponseDTO<>();
        // response.setData(...)	当前页的实际数据列表	从分页结果 Page 中提取数据	返回第 0 页的 10 条数据（content 字段）
        response.setData(resultPage.getContent());  //渲染当前页的表格 / 列表数据
        // response.setTotalElements(...)	符合条件的总记录数（所有页总和）	从分页结果 Page 中获取总记录数
        // 总共有 23 条数据（totalElements=23）
        response.setTotalElements(resultPage.getTotalElements()); // 显示“共 23 条数据”，或计算分页进度（如“1-10 条，共23条”）
        // response.setTotalPages(...)	总页数（所有数据需要分几页）
        // 从分页结果 Page 中获取总页数	23 条 / 10 条 = 3 页（totalPages=3）
        response.setTotalPages(resultPage.getTotalPages());     // 显示 “共 3 页”，或控制分页控件的页码按钮（如显示 1、2、3 页）
        // response.setCurrentPage(page)	当前页码（前端传入的页码）
        // 直接使用前端传入的 page 参数	前端传 page=0，则 currentPage=0
        response.setCurrentPage(page);                         // 高亮显示当前页码（如分页控件中高亮 “第 1 页”）
        // response.setPageSize(size)	每页大小（前端传入的每页条数）
        // 直接使用前端传入的 size 参数	前端传 size=10，则 pageSize=10
        response.setPageSize(size);                          // 在 “每页显示条数” 下拉框中回显当前选择（如默认选中 “10 条 / 页”

        return response;

    }
}
